#include<iostream>
#include<vector>
#include<signal.h>
#include<unistd.h>

int flag = 0;










// int main()
// {
//     // 父进程
//     signal(SIGCHLD, SIG_IGN); // 父进程
//     for (int i = 0; i < 10; i++)
//     {
//         pid_t id = fork(); // 如果我们有10个子进程呢？？6退出了，4个没退
//         if (id == 0)
//         {
//             sleep(3);
//             std::cout << "I am child, exit" << std::endl;
//             exit(3);
//             // if(i <= 6) exit(3);
//             // else pause();
//         }
//     }

//     while (true)
//     {
//         std::cout << "I am fater, exit" << std::endl;
//         sleep(1);
//     }

//     return 0;
// }



//下面这个是
// void header(int sign)
// {
//     std :: cout << "更改全局变量" << flag << "-> 1" << std :: endl;
//     flag = 1;
// }


// int main()
// {
//     signal(2,header);
//     while(!flag);
//     std :: cout << "process quit normal" << std :: endl;
//     return 0;
// }




//下面这段代码的作用是检测当我们运行一个程序的时候，当我们处理一个信号时，如果信号没处理完，在没处理完的时候再调用这个信号，这个信号就会进入阻塞态。
//并且当我们处理一个信号时，会先把pending表的1变为0，然后结束完信号的执行
// void handler(int signum)
// {
//     std::cout << "hello signal: " << signum << std::endl;
//     while(true)
//     {
//         //不断获取pending表！
//         sigset_t pending;
//         sigpending(&pending);
//         for(int i = 31; i >= 1; i--)
//         {
//             if(sigismember(&pending, i))
//                 std::cout << "1";
//             else
//                 std::cout << "0";
//         }
//         std::cout << std::endl;
//         sleep(1);
//     }
//     exit(0);
// }

// int main()
// {
//     struct sigaction act, oact;
//     act.sa_handler = handler;
//     sigemptyset(&act.sa_mask);
//     sigaddset(&act.sa_mask, 3);
//     sigaddset(&act.sa_mask, 4);
//     act.sa_flags = 0;

//     sigaction(SIGINT, &act, &oact); // 对2号信号进行了捕捉, 2,3,4都屏蔽

//     while(true)
//     {
//         std::cout << "hello world: " << getpid() << std::endl;
//         sleep(1);
//     }
//     return 0;
// }